package com.carrental.rental.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.carrental.rental.dto.OrderDTO;
import com.carrental.rental.entity.Order;
import com.carrental.rental.vo.OrderVO;

/**
 * 订单服务接口
 */
public interface OrderService extends IService<Order> {

    /**
     * 创建订单
     *
     * @param orderDTO 订单DTO
     * @return 订单ID
     */
    Long createOrder(OrderDTO orderDTO);

    /**
     * 根据ID获取订单详情
     *
     * @param id 订单ID
     * @return 订单VO
     */
    OrderVO getOrderById(Long id);

    /**
     * 根据订单号获取订单详情
     *
     * @param orderNo 订单号
     * @return 订单VO
     */
    OrderVO getOrderByOrderNo(String orderNo);

    /**
     * 分页查询用户订单
     *
     * @param page      分页参数
     * @param userId    用户ID
     * @param status    订单状态
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return 分页订单VO
     */
    Page<OrderVO> pageUserOrders(Page<Order> page, Long userId, Integer status, String startTime, String endTime);

    /**
     * 分页查询所有订单
     *
     * @param page      分页参数
     * @param orderNo   订单号
     * @param userId    用户ID
     * @param status    订单状态
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return 分页订单VO
     */
    Page<OrderVO> pageOrders(Page<Order> page, String orderNo, Long userId, Integer status, String startTime, String endTime);

    /**
     * 支付订单
     *
     * @param id 订单ID
     * @return 是否成功
     */
    boolean payOrder(Long id);

    /**
     * 取消订单
     *
     * @param id 订单ID
     * @return 是否成功
     */
    boolean cancelOrder(Long id);

    /**
     * 确认取车
     *
     * @param id 订单ID
     * @return 是否成功
     */
    boolean confirmPickup(Long id);

    /**
     * 确认还车
     *
     * @param id 订单ID
     * @return 是否成功
     */
    boolean confirmReturn(Long id);

    /**
     * 完成订单
     *
     * @param id 订单ID
     * @return 是否成功
     */
    boolean completeOrder(Long id);
} 